package StudentManagerSystem1;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class StudentMangerSystem {
    public StudentMangerSystem() throws IOException {
        //创建集合，用来存储和管理学生信息
        ArrayList<Student> studentList = new ArrayList<>();
        //读取文件中的学生信息，放到集合中
        readStudentFromFile(studentList);
        Scanner s = new Scanner(System.in);
        while (true) {
            menu();
            System.out.println("请输入您的选择：");
            String choice = s.nextLine();
            switch (choice) {
                //添加学生
                case "1" -> addStudent(studentList);
                //删除学生
                case "2" -> deleteStudent(studentList);
                //修改学生
                case "3" -> updateStudent(studentList);
                case "4" -> shwnStudent(studentList);
                //退出系统
                case "5" -> {
                    //推出之前先把集合中的信息写入文件
                    System.out.println("感谢您的使用，再见！");
                    writeStudentToFile(studentList);
                    System.exit(0);

                }
                default -> System.out.println("输入有误，请重新输入！");
            }
        }
    }

    //将集合的信息写入文件
    private void writeStudentToFile(ArrayList<Student> studentList) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("student.txt"));
        for (Student student : studentList) {
            bw.write(student.toString());
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }
    //将文件中的学生信息读取到集合中
    private void readStudentFromFile(ArrayList<Student> studentList) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("student.txt"));
        String line;
        while ((line= br.readLine()) != null) {
            String[] studentInfo = line.split("-");
            Student student = new Student(studentInfo[0], studentInfo[1],
                    studentInfo[2], studentInfo[3], studentInfo[4],studentInfo[5],
                    studentInfo[6],studentInfo[7],studentInfo[8],studentInfo[9]);
            studentList.add(student);
        }
        br.close();
    }

    //修改学生信息
    public void updateStudent(ArrayList<Student> studentList) {
        Scanner s = new Scanner(System.in);
        while (true) {
            System.out.println("请输入要修改学生的学号：");
            String id = s.nextLine();
            boolean flag = checkId(id, studentList);
            if (flag) {
                // 如果学号存在，调用update方法修改学生信息
                update(id, studentList);
                break;
            }else {
                // 如果不存在，提示重新输入
                System.out.println("该学生不存在，请重新输入！");
            }
        }


    }

    private void update(String id, ArrayList<Student> studentList) {
        Scanner s = new Scanner(System.in);
        // 遍历学生列表
        for (Student student : studentList) {
            // 如果学生ID与要修改的ID相同
            if (student.getId().equals(id)) {
                // 输入修改后的学生姓名
                System.out.println("请输入要修改后的学生姓名：");
                String name = s.nextLine();
                student.setName(name);
                // 输入修改后的学生年龄
                System.out.println("请输入要修改后的学生年龄：");
                String age = s.nextLine();
                student.setAge(age);
                // 输入修改后的学生性别
                System.out.println("请输入要修改后的学生性别：");
                String gender = s.nextLine();
                student.setGender(gender);
                // 输入修改后的学生学号
                String updateId;
                while (true){
                    System.out.println("请输入要修改的学生学号：");
                    updateId = s.nextLine();
                    // 检查输入的学号是否重复
                    if (!(checkId(updateId, studentList))){
                        // 如果不重复，将学号赋值给当前学生
                        student.setId(updateId);
                        break;
                    }else {
                        // 如果重复，提示用户重新输入
                        System.out.println("该学号已存在，请重新输入！");
                    }
                }
                // 输入修改后的学生家庭住址
                System.out.println("请输入要修改后的学生家庭住址：");
                String address = s.nextLine();
                student.setAddress(address);
                // 输入修改后的学生语文成绩
                System.out.println("请输入要修改后的学生语文成绩：");
                String chineseScore = s.nextLine();
                student.setChineseScore(chineseScore);
                // 输入修改后的学生数学成绩
                System.out.println("请输入要修改后的学生数学成绩：");
                String mathScore = s.nextLine();
                student.setMathScore(mathScore);
                // 输入修改后的学生英语成绩
                System.out.println("请输入要修改后的学生英语成绩：");
                String englishScore = s.nextLine();
                student.setEnglishScore(englishScore);
                // 提示修改成功
                System.out.println("修改成功！");
            }
        }
    }

    //删除学生信息
    public void deleteStudent(ArrayList<Student> studentList) {
        Scanner s = new Scanner(System.in);
        while (true){
            // 提示用户输入要删除的学生的学号
            System.out.println("请输入要删除学生的学号：");
            String id = s.nextLine();
            // 检查学号是否存在，存在则继续，不存在则提示用户重新输入
            boolean flag = checkId(id, studentList);
            if (!flag) {
                System.out.println("没有该学生，请重新输入！");
                return;
            } else {
                // 提示用户确定是否删除该学生
                System.out.println("确定要删除该学生吗？（y/n）");
                String choice = s.nextLine();
                // 如果用户确定删除，则从学生列表中移除该学生，并提示删除成功
                if (choice.equalsIgnoreCase("y")) {
                    studentList.removeIf(student -> student.getId().equals(id));
                    System.out.println("删除成功！");
                    break;
                // 如果用户决定不删除，则提示用户取消删除
                } else if (choice.equalsIgnoreCase("n")) {
                    System.out.println("取消删除！");
                    break;
                }
            }

        }
    }
    //显示已有学生信息
    public void shwnStudent(ArrayList<Student> studentList) {
        // 打印学生信息
        System.out.println("--------------------------------------学生的信息为：---------------------------------------");
        System.out.println("姓名\t\t年龄\t\t性别\t\t学号\t\t家庭住址\t\t" +
                "语文成绩\t\t数学成绩\t\t英语成绩\t\t\t总成绩\t\t平均成绩\t\t");
        // 遍历学生列表
        for (Student student : studentList) {
            // 打印每个学生的信息
            System.out.println(student.getName() + "\t\t" + student.getAge() + "\t\t" +
                    student.getGender() + "\t\t" + student.getId()+ "\t\t" +student.getAddress()+"\t\t"+ student.getChineseScore()
                    + "\t" + student.getMathScore()+ "\t\t" + student.getEnglishScore()+
                    "\t\t" + student.getSumScore(student.getChineseScore(),student.getMathScore(),student.getEnglishScore())
                    + "\t\t" + student.getAvgScore(student.getChineseScore(),student.getMathScore(),student.getEnglishScore()));
        }
        System.out.println("---------------------------------------------------------------------------------------");
    }

    // 菜单
    public void menu() {
        System.out.println("--------欢迎使用学生管理系统--------");
        System.out.println("--------1：添加学生--------");
        System.out.println("--------2：删除学生--------");
        System.out.println("--------3：修改学生--------");
        System.out.println("--------4：查询学生--------");
        System.out.println("--------5：退   出--------");
    }

    public void addStudent(ArrayList<Student> studentList) {
        //创建一个Scanner对象，用于接收用户输入
        Scanner s = new Scanner(System.in);
        System.out.println("请输入学生姓名：");
        //接收用户输入的姓名
        String name = s.nextLine();
        String id;
        //循环接收学号，直到输入的学号不存在于集合中
        while (true) {

            System.out.println("请输入学生学号：");
            id = s.nextLine();
            //判断学号是否重复
            if (checkId(id, studentList)) {
                System.out.println("该学号已存在，请重新输入");
            } else {
                break;
            }
        }
        String age;

        System.out.println("请输入学生年龄：");
        age = s.nextLine();

        System.out.println("请输入学生的家庭住址：");
        String address = s.next();
        System.out.println("请输入学生性别：");
        String gender = s.next();
        System.out.println("请输入学生语文成绩：");
        String ChineseScore = s.next();
        System.out.println("请输入学生数学成绩：");
        String mathScore = s.next();
        System.out.println("请输入学生英语成绩：");
        String EnglishScore = s.next();
        //创建学生对象
        Student stu = new Student();
        stu.setName(name);
        stu.setAge(age);
        stu.setId(id);
        stu.setGender(gender);
        stu.setAddress(address);
        stu.setChineseScore(ChineseScore);
        stu.setMathScore(mathScore);
        stu.setEnglishScore(EnglishScore);

        //将学生对象添加到集合中
        studentList.add(stu);
    }

    // 判断学号是否重复
    private boolean checkId(String id, ArrayList<Student> studentList) {
        //遍历集合
        for (Student student : studentList) {
            if (student.getId().equals(id)) {
                return true;
            }
        }
        return false;
    }
}
